home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-06-05 | 1.6 KB | 79 lines | [TEXT/MPS ] |
- {
- File: MenuTools.p
-
- This pascal unit contains a few general routines to perform popup menus.
-
- }
-
-
- UNIT MenuTools;
-
- INTERFACE
-
- USES Types, ToolIntf;
-
-
- PROCEDURE AppendAllMenuItems(Menu: MenuHandle; MenuItems: Str255);
-
- FUNCTION DoPopUpMenu(MenuID: INTEGER; MenuItems: Str255; CheckedItem: LONGINT;
- Top: LONGINT; Left: LONGINT): LONGINT;
-
-
- IMPLEMENTATION
-
- PROCEDURE AppendAllMenuItems(Menu: MenuHandle; MenuItems: Str255);
-
- VAR
- Index: Integer;
- BEGIN
-
- FOR Index := 1 TO length(MenuItems) DO
- IF MenuItems[Index] = ',' THEN
- MenuItems[Index] := ';';
-
- AppendMenu(Menu, MenuItems);
-
- END { AppendAllMenuItems } ;
-
- FUNCTION DoPopUpMenu(MenuID: INTEGER; MenuItems: Str255; CheckedItem: LONGINT;
- Top: LONGINT; Left: LONGINT): LONGINT;
- VAR
- Menu: MenuHandle;
-
- BEGIN
-
- { Create the PopUp menu }
- Menu := NewMenu(MenuID, '');
- AppendAllMenuItems(Menu, MenuItems);
- CheckItem(Menu, CheckedItem, true);
- InsertMenu(Menu, - 1);
-
- { Get Menu Selection }
- DoPopUpMenu := PopUpMenuSelect(Menu, Top, Left, CheckedItem);
-
- { Tidy up }
- DeleteMenu(MenuID);
- DisposeMenu(Menu);
-
- END; {DoPopUpMenu}
-
-
- { THIS HAS A BUG. DON’T USE IT FOR ANYTHING }
- PROCEDURE CStringToPString(CString: Ptr; VAR PString: Str255);
- TYPE
- CStr = PACKED ARRAY [1..32000] of CHAR;
- CStPtr = ^CStr;
- VAR
- Index: INTEGER;
- FakeStringPtr: StringPtr;
- BEGIN
- FakeStringPtr := StringPtr(CString);
- FOR Index := 1 TO 255 DO
- BEGIN
- IF (FakeStringPtr^[Index - 1] = chr(0)) THEN Leave;
- PString[Index] := FakeStringPtr^[Index - 1];
- END;
- PString[0] := chr(Index);
- END; { CStringToPString }
-
- END. {Unit}